const mongoose = require('mongoose');
const {encrypt} = require('../utils/encrypt');
const {Schema} = mongoose;

// Schema （模式）用于定义定义集合文档中的结构和规则

const userSchema = new Schema({
    username: {
        type: String,
        required: false
    },
    email:{
        type: String,
        required: true,
        unique: true,
        trim: true,
        lowercase: true
    },
    password: {
        type: String,
        required: true
    },
    avater:{
        type: String,
        required: false
    },
    createAt: {
        type: Date,
        default: Date.now
    }
});
// Schema的pre（钩子函数）方法，在文档保存删除更新之前执行（起到数据预处理的作用）
userSchema.pre('save', async function(next){
    // 仅当password字段被修改时，才执行加密操作，防止修改其他字段时重复加密
    if(!this.isModified('password')) return next();
    try {
        await encrypt(this.password).then((value) => {
            this.password = value;
        })
        next();
    } catch (error) {
        // 传递错误给下一个中间件
        next(error);
    }
})


const UserModel = mongoose.model('User',userSchema);

module.exports = UserModel;